package com.ccsu.mymarket.config;

import com.ccsu.mymarket.interceptor.MyAuthorityInterceptor;
import com.ccsu.mymarket.interceptor.MyLoginInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
//作用和xml配置文件相同，表示此bean是一个Spring配置
//此外，此类可以使用@Bean注解来初始化定义bean。
public class MyWebConfiguration implements WebMvcConfigurer {

    /**
     * 官方文档写法
     *
     * @Bean public WebMvcConfigurer corsConfigurer() {
     * return new WebMvcConfigurer() {
     * @Override public void addCorsMappings(CorsRegistry registry) {
     * registry.addMapping("/greeting-javaconfig").allowedOrigins("http://localhost:8080");
     * }
     * };
     * }
     **/
    public void addCorsMappings(CorsRegistry registry) {
        //后台响应路径
        // 是拦截所有的文件夹，不包含子文件夹
        // 是拦截所有的文件夹及里面的子文件夹
        registry.addMapping("/**")
//                    来源（前端请求路径），允许访问服务器资源的外域 URI
//                    对于附带身份凭证的请求，服务器不得设置 Access-Control-Allow-Origin 的值为“*”。
                .allowedOriginPatterns("*")
//                    请求允许所使用的 HTTP 方法
                .allowedMethods("*")
//                    是否允许请求携带身份凭证（基于 HTTP cookies 和 HTTP 认证信息）
                .allowCredentials(true)
//                  允许前端请求头携带的自定义字段，实际请求中允许携带的首部字段
//                    .allowedHeaders("Origin,Authorization,Content-Type,Accept")
                .allowedHeaders("*")
//                    允许浏览器访问的响应头
                .exposedHeaders("*")
//                  preflight(预检)请求的结果能够被缓存多久(秒)
                .maxAge(3600);
    }

    /**
     * 将拦截器作为bean写入配置中
     * @return
     */
    @Bean
    public MyLoginInterceptor getLoginInterceptor() {
        return new MyLoginInterceptor();
    }

    @Bean
    public MyAuthorityInterceptor getAuthorityInterceptor() {
        return new MyAuthorityInterceptor();
    }


    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //  /**表示拦截所有请求
        String[] addPath = {"/**"};
        // 放行请求
        String[] excludePath = {"/login","/logout","/register","/error"};
//        登录拦截器
        registry.addInterceptor(getLoginInterceptor()).addPathPatterns(addPath).excludePathPatterns(excludePath);
//       权限拦截器
        registry.addInterceptor(getAuthorityInterceptor()).addPathPatterns(addPath).excludePathPatterns(excludePath);
    }


    /** @Override
     * 配置静态资源设置
     * 配置虚拟路径

    public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/path/**")
    .addResourceLocations("file:/Users/admin/Downloads/output/");
    }* */
}